package com.bzkj.document.service.otherinboundorder;

import com.bzkj.common.core.domain.AjaxResult;
import com.bzkj.common.core.domain.model.LoginUser;
import com.bzkj.common.core.page.TableDataInfo;
import com.bzkj.common.domain.NccRequestDTO;
import com.bzkj.document.domain.DocConfirmDTO;
import com.bzkj.document.domain.otherinorder.dto.ICGeneralInRequest;
import com.bzkj.document.domain.otherinorder.dto.OtherInboundQueryDTO;

import java.util.HashMap;

/**
 * @projectName: bzkj-wms
 * @package: com.bzkj.document.service.otherinboundorder.impl
 * @className: OtherInboundOrderService
 * @description: 其他入库单业务层
 * @author: C1309
 * @createDate: 2024年11月26日
 * @version: v1.0
 */
public interface OtherInboundOrderService {

    /**
     * 查询ncc其他入库单
     *
     * @param nccRequestDTO 查询参数
     * @return 查询条件
     */
    TableDataInfo selectNccOtherInboundOrder(NccRequestDTO nccRequestDTO);

    /**
     * 对NCC其他入库单进行签字
     *
     * @param cgeneralhid    表体主键
     * @param loginUser 登录用户
     * @return 操作结果
     */
    AjaxResult otherInboundOrderSignature(String cgeneralhid, LoginUser loginUser);

    /**
     * 删除NCC其他入库单
     *
     * @param header    表头主键
     * @param loginUser 登录用户
     * @param reason    删除原因
     * @return 操作结果
     */
    AjaxResult deleteOtherInboundOrder(String header, LoginUser loginUser, String reason);

    /**
     * 新增NCC其他入库单
     *
     * @param responseBody 请求参数
     * @return 操作结果
     */
    AjaxResult addOtherInboundOrder(ICGeneralInRequest responseBody);

    /**
     * 更新NCC其他入库单
     *
     * @param responseBody 请求参数
     * @param loginUser    登录用户
     * @param isSign       是否跳过校验
     * @return 操作结果
     */
    AjaxResult updateOtherInboundOrder(HashMap<String, Object> responseBody, LoginUser loginUser, boolean isSign);

    /**
     * 查询本地其他入库单
     *
     * @param otherInboundQueryDTO 查询参数
     * @param pageNum              当前页
     * @param pageSize             每页条数
     * @return 查询结果
     */
    TableDataInfo getLocalOtherInboundOrder(OtherInboundQueryDTO otherInboundQueryDTO, int pageNum, int pageSize);

    /**
     * wms确认ncc其他入库单
     *
     * @param docConfirmDTO 确认信息
     * @return 操作结果
     */
    AjaxResult confirmOtherInboundOrder(DocConfirmDTO docConfirmDTO);

    /**
     * 其他入库单回退
     *
     * @param headerId  表头主键
     * @param loginUser 操作人
     * @return 操作结果
     */
    AjaxResult orderBack(String headerId, LoginUser loginUser);

    /**
     * 更新库存
     * @param headerId 表头主键
     * @param loginUser 操作人
     * @return 操作结果
     */
    AjaxResult updateInventory(String headerId,LoginUser loginUser);
}
